package com.ruoyi.common.utils;


import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @description: 四舍六入五成双计算
 *
 */
public class BankerSRoundingUtils {
    /**
     * @param value 需要科学计算的数据
     * @param digit 保留的小数位
     * @return
     * 功能：四舍六入五成双计算法
     */
    public static String sciCal(Double value, int digit) {
        DecimalFormat decimalFormat = new DecimalFormat("#.################");
        //判断是否科学计算法，如果是就进行转换
        String datavalue=null;
        boolean scientificNotation = StringUtils.isScientificNotation(String.valueOf(value));
        if (scientificNotation) {
            BigDecimal bigDecimal = new BigDecimal(String.valueOf(value));
            String effectiveValuesdatas = bigDecimal.toPlainString();
            datavalue = effectiveValuesdatas;
        } else {
            if(value!=null&&!"--".equals(value)&&!"-1".equals(value)&&!"*".equals(value)&&!"".equals(value)){
                datavalue=String.valueOf(value);
            }
        }
        String datas = datavalue;
        String result = "-999";
        BigDecimal bd = new BigDecimal(datas);
        bd = bd.setScale(digit, RoundingMode.HALF_EVEN);
        result = bd.toString();
        return result;
    }
    /**
     * @Description 计算均值数据
     * @Param [avgData]
     * @return java.lang.Double
     **/
    public static Double AVG(List<String> avgData){
        //输入多个数字，并求其和与平均值，每输一个数用空格确认
        Scanner scanner = new Scanner(System.in);
        //和
        double sum = 0;
        //计算输了多少个数字
        int m=0;
        for(int i=0;i<avgData.size();i++){
            double x = Double.valueOf(String.valueOf(avgData));
            m++;
            sum = sum + x;
            System.out.println("你输入了第" + m + "个数据，当前数据的sum=" + sum);
        }
        double data = sum / m;
        System.out.println(m + "个数和为：" + sum);
        System.out.println(m + "个数的平均数为：" + (sum / m));
        //scanner.close();

        return data;
    }

    /**
     * @Description 根据传入的值进行截取(最后一位不能为0倒数第二位值要是0 ， 保留最后一位有效值)
     * @Param [datastring]
     **/
    public static Double ConvertData(Double datastring) {
        String datas = String.valueOf(datastring);//转换为string
        boolean contains = datas.contains(".");//是否存在小数点
        if (contains) {
            int index = datas.indexOf(".");//获取小数点前的数据位数
            String beforeNum = datas.substring(index + 1, datas.length());//进行截取小数点后的数据
            int k = 1 + index;//存放有效数据的位置
            for (int i = 0; i < beforeNum.length(); i++) {
                char c = beforeNum.charAt(i);//获取当前值
                String aDouble = String.valueOf(c);//转换进行判断
                k++;//如果不为0加一
                //判断数据不能为0，如果为0结束循环返回值
                if (!"0".equals(aDouble)) {
                    break;
                }
            }
            String data = datas.substring(0, k);
            return Double.valueOf(data);
        }
        return null;
    }

    /**
     * @Description //两个值计算占比
     * @Param [datasize 监测数量, size 总数]
     **/
    public static String countdouble(Double datasize, Double size) {
        DecimalFormat format2 = new DecimalFormat("#.00");
        Double excellentdouble = datasize / size * 100;
        String str2;
        if (excellentdouble != null && excellentdouble != 0.0) {
            str2 = format2.format(excellentdouble);
        } else {
            str2 = "0.00";
        }
        return str2;
    }


}

